iT邦幫忙

DAY 23
4

程式設計心法系列 第 23

程式設計心法:22.物件?了了沒?

  • 分享至 

  • xImage
  •  

物件導向」,一看到這個名詞,好像是要進入到神聖的殿堂一般,讓人由不得肅然起敬。

當然在以前 DOS 的年代早期,確實是如此。但是在進入到 Widnows 的時代、網際網路的時代,我們寫的程式,可一點也離不開物件導向啊!

諸如 Windows Form、HTML 的 Document Object Model,一個又一個的物件模型,充斥在我們的程式當中。少了物件的特性,說真的,很難想像程式開發會變成什麼樣子。
我們都在使用物件,取用物件的屬性,呼叫物件的方法;但是我們卻很少知道物件裡面到底麼運作的,它是怎麼建構出來的!這就是物件導向**封裝(Encapsulation)**的特性。

而物件又是一種很抽象的東西,卻又能表達得很具象。就好像名詞這個東西,一個名詞代表著某種的意義。名詞本身就是一個**抽象性(Abstraction)的概念,例如「房子」,房子本身具有各種組成的材質與蓋房子的方法,房子在建構之前,又需要有設計圖,才能按圖施工,這個設計圖也就是我們一般所稱的類別(Class)**。

採用物件導向的設計方式,我們可以產生適當抽象程度的物件,以對應到真實世界中的問題,而不用事事都以函式來解決。

所以,簡單的說:物件本身具有抽象與封裝的特性,依據既定的類別,來產生可以運作的實體(Instance,指執行期間存在於記憶體中的物件),同時提供多樣的屬性與建構的方法,讓我們可以在電腦的世界中模擬現實世界中的各種情況。

除此之外,物件導向最大的貢獻在於物件的 Reuse 以及**繼承性(Inheritance)。寫過的程式碼,透過物件的包裝,可以重複的運用在其他的程式當中,缺乏的部份,又可以透過繼承的方式,再擴充或賦予新的定義,產生新的樣貌(多型 Polymorphism**),如此讓我們的程式更具彈性。

或者我們可以利用物件抽象的特性,定義共通的**介面(Interface)**,用不同的程式語言來實作(Implement)它。當我們作法改變時,只要遵循介面的定義,我們可以很容易的替換掉原來的程式,而完全不會影響既有的運作方式(如 DLL 的替換),讓舊瓶也能裝新酒,所需花費的成本降到最低。當然也可以透過介面來達到不同系統之間的資料交換,透過物件的溝通,達成模組化、元件化的最佳境界。

以上拉拉雜雜扯了一堆,大概將我對物件的理解做一番整理,沒有一行程式,我想觀念的理解是比較重要的事情,當然物件導向不可能這樣就能一窺全貌,還是要不斷的練習與參考相關的資料。

接下來會介紹如何建構物件與實作繼承的作法與應用,屆時再做程式碼的介紹。

本系列文章


上一篇
程式設計心法:21.Error Handling
下一篇
程式設計心法:23.物件導向設計的步驟
系列文
程式設計心法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2009-10-29 09:08:37

問卷調查:
請問有多少人曾經繼承自己寫的物件?
請問有多少人曾經繼承別人寫的物件?

jamesjan iT邦高手 1 級 ‧ 2009-10-31 15:09:29 檢舉

我在 Delphi 3 的時候做過,那時候算是練身體(誤)練習物件導向
Delphi 3 應該是那時候 IDE 工具裡面把物件導向視覺化的功能做得比較完整的一個
大部分都是用來繼承既有的元件,再加以包裝擴充使用。(當時有付費買國外的一組元件)

不過大型的專案就沒有這樣做過了。(那時的專案還是 Clipper)

觀察資料處理類型的系統
在不同的系統中
做的「動作」(增刪查改)是相同的
只有資料「欄位」是不同的

若以物件的繼承或多型來實作
理論上應該很輕鬆就可以寫出第二套、第三套系統
但實務上似乎不是如此
每套新系統就像是「重新寫一套」

還是我見識太少,沒見過真正OOP的強大威力?

ithomelee iT邦研究生 1 級 ‧ 2011-01-20 18:38:36 檢舉

antijava提到:
若以物件的繼承或多型來實作
理論上應該很輕鬆就可以寫出第二套、第三套系統
但實務上似乎不是如此
每套新系統就像是「重新寫一套」

個人也很好奇,台灣的軟體公司,真的有發揮OOP的強大威力?
如果沒有,是什地方出了問題???
那些CMMI level 3 or 4的軟體公司,有發揮OOP的強大威力?

0
pantc328
iT邦高手 1 級 ‧ 2009-10-29 14:08:33

我可以寫物件.也可以繼承物件.
我可以設計界面,也可以實作介面.

請問有多少人不曾繼承別人寫的物件??
現在新的程式都一定會繼承別人寫的物件.

比如你寫WindowsForm
你一定要寫表單.

class SaleOrderForm:Form
{
}
這裡就繼承Form Class.

你寫ASP.NET WebPage

class SaleOrderPage:Page{
}
你還是要繼承Page Class.

jamesjan iT邦高手 1 級 ‧ 2009-10-31 15:03:00 檢舉

寫 ASP.Net 使用 Template 也是以 Web Page 繼承的方式來運作的 ^^

我要留言

立即登入留言